
import java.util.Date;

class TceService {

    static transactional = true
    Date hoje = new Date();

    /*
     * Verifica se foram informados os dados necessários para recindir um TCE.
     */
    boolean verificaRescisaoTce(Tce tce){
        if(tce.dtRescisao && tce.rescCausa){
            return true;
        }else{
            return false;
        }
    }


    /*
     * Verifica se tem pendência antes de gerar o TCE.
     */
    public boolean verificaPendenciasTce(Tce tce){
        if(possuiRemuneracao(tce) && possuiPlanoEstagio(tce)){
            return true;
        }else{
            return false;
        }
    }

    /*
     * Método que veifica se o Tce possui remuneração cadastrada para poder gerar o mesmo.
     */
    private boolean possuiRemuneracao(Tce tce){
        TceRemunera tceRemunera = TceRemunera.findByTce(tce);
        if(tceRemunera){
            return true;
        }else{
            return false;
        }
    }

    /*
     * Método que veifica se o Tce possui pagamento cadastrado.
     */
    private boolean possuiPagamento(Tce tce){
        TcePagamento tcePagamento = TcePagamento.findByTce(tce);
        if(tcePagamento){
            return true;
        }else{
            return false;
        }
    }

    /*
     * Método que verifica se o tce possui plano de estágio cadastrado.
     * Mesmo estando cadastrado precisa ter a data de assinatura do supervidor e do estagiário para gerar o Tce.
     */
    private boolean possuiPlanoEstagio(Tce tce){
        PlanoEstagio planoEstagio = PlanoEstagio.findByTce(tce);
        if(planoEstagio){
            // Verifica se já possui a data das assinaturas.
            if(planoEstagio.dtAssinaSuperior && planoEstagio.dtAssinaEstagiario){
                return true;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }


    /*
     * Verifica qual é a ultima sequencia e gera a próxima.
     */
    public int verificaProximaSequenciaTce(Solicitacao solicitacao) {
        def sequencia = buscarUltimoTce(solicitacao);
        if(sequencia){
            return sequencia.sequencia += 1;
        }else{
            return 1
        }
        
    }


    /*
     * Método que verifica se tem TCE anterior.
     */
    boolean possuiTceAnterior(Solicitacao solicitacao){
        def tce = buscarUltimoTce(solicitacao);
        if(tce){
            return true;
        }else{
            return false;
        }
    }

    /*
     * Método que verifica se o TCE anterior já acabou ou se foi rescindido.
     */
    boolean verificaTceAnterior(Solicitacao solicitacao){
        def tce = buscarUltimoTce(solicitacao);
        if(tce){
            if(tce.sequencia < 4){
                // Verifica se a dtFinal é maior que a data de hoje e se dtRescisao está preenchido.
                if(!tce.dtFim.after(hoje) || tce.dtRescisao){
                    return true;
                }else{
                    return false;
                }
            }else{
                return false;
            }
        }else{
            return false
        }
    }

    /*
     * Método que retorna o ultimo TCE da solicitação.
     */
    private Tce buscarUltimoTce(Solicitacao solicitacao){
        def tce = Tce.createCriteria()
        def results = tce.list {
                and {
                    eq("solicitacao.id", solicitacao.id)
                }
                maxResults(1)
                order("sequencia", "desc")
        }

        return results[0]
    }

    /*
     * Método que verifica se o TCE está ativo.
     * && tce.dtFim.after(new Date())
     *  && !tce.dtRescisao
     */
    boolean tceEstaAtivo(Tce tce) {
        def tceInstance = tce;
        if((tceInstance.situacao == 1) && tceInstance.dtFim.after(hoje)){
            return true;
        }else{
            return false;
        }
    }


    /*
     * NÂO ESTA SENDO UTILIZADO.
     * Método que verifica se uma solicitação já tem 4 TCEs.
     */
    private boolean possuiQuatroTces(Solicitacao solicitacao){
        def tce = buscarUltimoTce(solicitacao)
        if(tce.sequencia < 4){
            return true;
        }else{
            return false;
        }
    }


    /*
     * Verifica se o status do tce esta aguardando, pois o mesmo só pode ser alterado nesta situacao.
     */
    String verificaSituacaoTce(Tce tceInstance){
        String sit;
        if(tceInstance.situacao == '0'){
            sit = 'aguardando';
        }
        if(tceInstance.situacao == '1' && tceInstance.dtFim.after(hoje)){
            sit = 'ativo'
        }
        if(!tceInstance.dtFim.after(hoje)){
            sit = 'concluido';
        }
        if(tceInstance.dtRescisao && tceInstance.rescCausa && tceInstance.obsCausa){
            sit = 'rescindido';
        }
        return sit;
    }


    /*
     *
     */
    public Date calculaDataFimTce(Date data){

        Date dataFimTce = data + 180;

        return dataFimTce;
    }

}